﻿

using Chapter02.DesginMode1;

/**
 * 2 观察者模式
 * 让你的对象知悉现况
 * 有趣的事情发生时，可千万别错过了！
 * 气象观测站
 * 气象监测应用的概况
 * 瞧一瞧刚送到的WeatherData类
 * 我们目前知道些什么？
 * 先看一个错误示范
 * 我们的实现有什么不对？
 * 认识观察者模式
 * 出版者+订阅者=观察者模式
 * 观察者模式的一天
 * 五分钟短剧：观察的主题
 * 两周后……
 * 定义观察者模式
 * 定义观察者模式：类图
 * 松耦合的威力
 * 办公室隔间对话
 * 设计气象站
 * 实现气象站
 * 在WeatherData中实现主题接口
 * 现在，我们来建立布告板吧！
 * 启动气象站
 * 围炉夜话
 * 使用JAVA内置的观察者模式
 * JAVA内置的观察者模式如何动作
 * 利用内置的支持重做气象站
 * 代码贴
 * 运行新的代码
 * 在JDK中，还有哪些地方可以找到观察者模式
 * 代码是这样的……
 * 设计箱内的工具
 * 挑战设计原则
 * 习题解答
 * 
 * OO基础
 * 抽象
 * 封装
 * 多态
 * 继承
 * 
 * OO设计原则
 * 封装变化，找出应用中可能需要变化之处，把这们独立出来，不要和那些不需要变化的代码混在一起
 * 多用组合，少用继承
 * 针对接口编程，而不是针对实现编程
 * 为了交互对象之间的松耦合设计而努力
 * 
 * OO模式
 * 观察者模式——在对象之间定义一对多的依赖，这样一来，当一个对象改变状态，依赖它的对象都会收到通知，并自动更新
 */
var weatherData = new WeatherData();
_ = new CurrentConditionsDisplay(weatherData);
_ = new StatisticsDisplay(weatherData);
_ = new ForecastDisplay(weatherData);

weatherData.SetState(80, 65, 30.4f);
weatherData.SetState(82, 70, 29.2f);
weatherData.SetState(78, 90, 29.2f);